//
// Created by Semir on 2020/4/28.
//

#include <iostream>
#include <vector>

using namespace std;

const int MAX_LEN = 5005;
int n;

void highPrecisionAdd(vector<int> &sum, vector<int> &adder) {
    int tmp = 0;
    int len = max(sum.size(), adder.size());
    sum.resize(len + 1);
    for (int i = 0; i < len; i++) {
        tmp = sum[i] + adder[i];
        sum[i + 1] += tmp / 10;
        sum[i] = tmp % 10;
    }
    if (sum[len] == 0) {
        sum.resize(len);
    }
}

void highPrecisionMulti(vector<int> &product, int fac) {
    int len = product.size();
    product.resize(MAX_LEN);
    for (int i = 0; i < len; i++) {
        product[i] *= fac;
    }
    int i = 0;
    while (i < len || product[i] != 0) {
        product[i + 1] += product[i] / 10;
        product[i] %= 10;
        i++;
    }
    product.resize(i);
}

void highPrecisionDivision(vector<int> &from, int divisor) {
    for (int i = from.size() - 1; i >= 0; i--) {
        from[i - 1] += (from[i] % divisor) * 10;
        from[i] /= divisor;
    }
    int i = from.size() - 1;
    while (from[i] == 0) {
        i--;
    }
    from.resize(i + 1);
}

//void test01() {
//    vector<int> vec = {0, 0, 5, 1};
//    highPrecisionDivision(vec, 60);
//    cout << vec.size() << endl;
//}
//
//void test02() {
//    vector<int> vec = {9, 7};
//    highPrecisionMulti(vec, 78);
//    cout << vec.size() << endl;
//}

int main() {
    cin >> n;
    vector<int> fac = {1};
    for (int i = n + 2; i <= 2 * n; i++) {
        highPrecisionMulti(fac, i);
    }
    for (int i = 1; i <= n; i++) {
        highPrecisionDivision(fac, i);
    }
    for (int i = fac.size() - 1; i >= 0; i--) {
        cout << fac[i];
    }
    cout << endl;
    return 0;
}